ทดลองเริ่มต้นใช้งาน Sample Elastic Beanstalk ด้วย PHP
ครั้งนี้ผมจะมาอธิบายเกี่ยวกับการ ทดลองเริ่มต้นใช้งาน Sample Elastic Beanstalk ด้วย PHP โดยการสร้าง Application และ Environment ใน Elastic Beanstalk ตามองค์ประกอบหลักด้านล่างนี้ครับ
※องค์ประกอบหลัก
มีสององค์ประกอบใหญ่ๆที่ประกอบเป็น Elastic Beanstalk คือ "Environment" และ "Application" โดยมีความเกี่ยวข้องกันตามแผนภาพด้านล่างคือ จะมี "Application" เป็นหัวข้อหลัก แล้วในแต่ละ "Application" จะมี "Environment" อยู่
หน้าที่ของ "Application" คือ การอัพโหลดหรือควบคุมแอปพลิเคชันที่สร้างขึ้น
หน้าที่ของ "Environment" คือ กำหนดสภาพแวดล้อมที่แอปพลิเคชันที่ทำงานจริง
อ่านรายละเอียดเพิ่มเติมได้ที่ด้านล่างนี้ครับ ↓↓↓
การสร้าง Key Pairs
ดูตัวอย่างที่นี่: การ Create Key Pair
ตัวอย่างตั้งค่าการสร้าง Key Pairs ในบทความนี้
※Create Key pairs
Name:tinnakorn-eb-test
Private key file format:.ppk
การสร้าง Application และ Environment ใน Elastic Beanstalk
ขั้นตอนนี้ผมจะลองสร้าง Application และ Environment โดยใช้ Platform PHP ในการรัน Server ครับ
ค้นหาElastic Beanstalk
และคลิกเข้ามาที่Elastic Beanstalk
สำหรับผู้ที่ยังไม่เคยใช้งานให้ดูที่ด้านขวาตรงหัวข้อ Get started และคลิกที่Create Application
เมื่อเข้ามาที่หน้า Create a web app แล้ว มาที่หัวข้อ Application information แล้วตั้งค่าดังนี้:
» Application name:tinnakorn-eb-test
(ชื่ออะไรก็ได้)
ถัดมาหัวข้อ Platform โดย AWS Elastic Beanstalk มี Platform ที่รองรับดังนี้:
- .NET Core on Linux
- .NET on Windows Server
- Docker
- GlassFish
- Go
- Java
- Node.js
- PHP
- Python
- Ruby
- Tomcat
การตั้งค่าในหัวข้อ Platform:
» การสาธิตในครั้งนี้ผมจะใช้ Platform:PHP
» Platform branch จะถูกเลือกให้อัตโนมัติ
» Platform version ก็จะถูกเลือกให้อัตโนมัติเหมือนกัน (Platform version จะมีการอัปเดตเวอร์ชันใหม่มาเรื่อยๆ ดังนั้นแนะนำให้ใช้เวอร์ชันที่มี (Recommended) ครับ)
ถัดมาหัวข้อ Application code ผมจะใช้เป็น ◉Sample application
เมื่อตั้งค่าหน้านี้เสร็จแล้ว คลิกที่ปุ่มConfigure more options
※หน้า Configure [Yourname]-env
เมื่อคลิกปุ่ม Configure more options แล้วจะเข้ามาหน้า Configure [Yourname]-env แล้วจะแสดงหน้าจอแบบนี้
จากนั้นทำการตั้งค่าในขั้นตอนถัดไปได้เลยครับ
การตั้งค่าหน้า Modify instances
มาที่หัวข้อ Instances คลิกที่Edit
การตั้งค่าหน้า Modify instances หัวข้อ Root volume (boot device):
» Root volume type:General Purpose (SSD)
(volume type นี้คือ gp2 ครับ)
» Size:8
GB (ใส่ตามจำนวนที่ต้องการใช้งาน)
เมื่อตั้งค่าเสร็จแล้ว เลื่อนลงมาด้านล่างขวาสุด คลิกปุ่มSave
การตั้งค่าหน้า Modify capacity
มาที่หัวข้อ Capacity คลิกที่Edit
การตั้งค่าหน้า Modify capacity หัวข้อ Auto scaling group:
» เลื่อนลงมาข้างล่างที่ Instance types แล้วคลิก✕
ที่ t2.micro และ t2.small ออกไป
หมายเหตุ: ในส่วนนี้ให้เลือก EC2 Instance Type เพื่อเริ่มต้นใช้งานจาก Elastic Beanstalk ในกรณีที่ตั้งค่าหลายอัน หนึ่งในนั้นจะถูกสุ่มเลือกมาใช้งาน แต่ครั้งนี้ผมจะเปลี่ยนการตั้งค่า เนื่องจากว่าผมต้องการใช้แค่t3a.nano
ในการสาธิตครับ
จากนั้นพิมพ์ค้นหาและเลือก Instance types ที่เราต้องการ เช่นt3a.nano
เมื่อตั้งค่าเสร็จแล้ว เลื่อนลงมาด้านล่างขวาสุด คลิกปุ่มSave
การตั้งค่าหน้า Modify security
มาที่หัวข้อ Security คลิกที่Edit
การตั้งค่า Modify security:
※Service role
» Service role จะถูกเลือกโดยอัตโนมัติ
※Virtual machine permissions
» EC2 key pair:tinnakorn-eb-test
(เลือก Key Pair ที่เราสร้างไว้ตอนแรก)
» IAM instance profile จะถูกเลือกโดยอัตโนมัติ
» เมื่อตั้งค่าเสร็จแล้ว คลิกปุ่มSave
การตั้งค่าหน้า Modify Managed Updates
มาที่หัวข้อ Managed Updates คลิกที่Edit
การตั้งค่าหน้า Modify managed updates หัวข้อ Managed platform updates:
» Managed updates: ติ๊ก ✅ ออกให้เป็น □ Enabled เพื่อไม่ให้มีการอัปเดต
» คลิกปุ่มSave
เมื่อตั้งค่าในหน้า Configure [Yourname]-env เสร็จแล้ว เลื่อนลงมาด้านล่างสุด คลิกปุ่มCreate app
จากนั้นรอการเริ่มต้นระบบสักครู่ เมื่อเสร็จแล้วจะแสดงหน้าจอแบบนี้
การตรวจสอบ Monitoring
มาที่เมนูด้านซ้าย เลือกMonitoring
เราสามารถตรวจสอบ Monitoring ได้จากหน้าจอนี้เลยครับ
การตรวจสอบ Events
เราสามารถตรวจสอบEvents
ได้จากหน้าจอนี้เลยครับ
อย่างเช่นSuccessfully launched environment: Tinnakornebtest-env
คือการเริ่มต้นระบบเสร็จสิ้นแล้ว เป็นต้น
การตรวจสอบหน้าเว็บเบราว์เซอร์
มาที่เมนูด้านซ้าย เลือก▼ [Yourname]-env
คลิกที่ URL ตามรูปภาพได้เลยครับ
เมื่อแสดงหน้าจอแบบนี้แล้ว ถือว่าเราสามารถใช้งาน Elastic Beanstalk ด้วย PHP ได้แล้วครับ
การเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk จาก PuTTY
สิ่งที่จะทำในขั้นตอนนี้คือ:
・ตรวจสอบ Instance ID จาก Health
・ตรวจสอบ IP Address จาก EC2
・ทำการเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk จาก PuTTY
・ตรวจสอบไฟล์ PHP หน้า Sample ที่มีอยู่ใน [ /var/www/html/index.php ]
ตรวจสอบ Instance ID จาก Health
ผมจะทำการตรวจสอบ Instance ID จาก Health เพื่อนำไปค้นหา Instance ที่เป็นของเราใน EC2
เมื่อเข้ามาแล้วเราจะเห็น Instance ID ของเรา ให้คลิกตามรูปภาพได้เลยครับ
เราสามารถดู Instance ID แบบนี้ได้ด้วย และในกรณีที่ Instance ใน EC2 มีเยอะ เราสามารถ Copy Instance ID นี้ไปค้นหาอันที่เป็นของเราได้ ซึ่งผมจะทำการสาธิตในขั้นตอนถัดไปครับ
ตรวจสอบ IP Address จาก EC2
ผมจะทำการตรวจสอบ IP Address จาก EC2 เพื่อ Copy IP Address ไปใช้ในการ Login ในโปรแกรม PuTTY
มาที่หน้า Console Instance แล้ววาง Instance ID ที่ Copy มาเมื่อสักครู่นี้ลงในช่อง?︎ Search
+ Enter
แล้ว Instance ของเราที่ถูกสร้างจาก Elastic Beanstalk จะแสดงขึ้นมา
จากนั้นให้คลิกเข้าไปที่ Instance ID ของเราได้เลยครับ
เมื่อเข้ามาแล้วจะแสดงหน้าจอแบบนี้ จากนั้นให้ Copy❐
Public IPv4 address เตรียมไว้เพื่อที่จะนำมาใช้ในการเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk จาก PuTTY ในขั้นตอนถัดไปครับ (ให้บันทึก Public IPv4 address ไว้ที่ Nodepad เพื่อใช้ในการเทียบกับ Instance ตัวใหม่ในขั้นตอนสุดท้ายด้วยครับ ซึ่งในส่วนนี้มีอธิบายไว้ในขั้นตอนสุดท้ายครับ)
ทำการเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk จาก PuTTY
ในขั้นตอนนี้ให้ทำการเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk จาก PuTTY
ดูตัวอย่างที่นี่: การ Connect to EC2 by PuTTY
※ตัวอย่างตั้งค่าการเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk จาก PuTTY
・Session:
Host Name: Your Public IPv4 address (EC2 Instance)
Saved Sessions:tinnakorn-eb-test
(ชื่ออะไรก็ได้)・Connection:
Seconds between keepalives (0 to turn off):60
・Connection → Data:
Auto-login username:ec2-user
(บังคับให้ใส่ตามนี้เพราะว่าเป็น AMI: Amazon Linux 2)・Connection → SSH → Auth:
Private key file for authentication: [Browse...]tinnakorn-eb-test.ppk
(เลือก key_pairs.ppk ของเรา)・Session:
Saved Sessions:tinnakorn-eb-test
[Save and Open]
Output (example)
root@ip-172-31-9-54:~
Using username "ec2-user".
Authenticating with public key "tinnakorn-eb-test"
_____ _ _ _ ____ _ _ _
| ____| | __ ___| |_(_) ___| __ ) ___ __ _ _ __ ___| |_ __ _| | | __
| _| | |/ _ \/ __| __| |/ __| _ \ / _ \/ _\ | '_ \/ __| __/ _\ | | |/ /
| |___| | (_| \__ \ |_| | (__| |_) | __/ (_| | | | \__ \ || (_| | | <
|_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\
Amazon Linux 2 AMI
This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH
WILL BE LOST if the instance is replaced by auto-scaling. For more information
on customizing your Elastic Beanstalk environment, see our documentation here:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
[ec2-user@ip-172-31-9-54 ~]$
รันคำสั่งนี้เพื่อเข้าสู่ระบบในฐานะผู้ใช้ที่มีสิทธิ์ root
sudo su -
Output (example)
root@ip-172-31-9-54:~
[ec2-user@ip-172-31-9-54 ~]$ sudo su -
[root@ip-172-31-9-54 ~]#
ตรวจสอบไฟล์ PHP หน้า Sample ที่มีอยู่ใน [ /var/www/html/index.php ]
รันคำสั่งนี้เพื่อเข้าไปที่/var/www/html/
cd /var/www/html/
Output (example)
root@ip-172-31-9-54:~
[root@ip-172-31-9-54 ~]# cd /var/www/html/
[root@ip-172-31-9-54 html]#
รันคำสั่งนี้เพื่อตรวจสอบไฟล์ index.php ในโฟลเดอร์ html
ll
Output (example)
root@ip-172-31-9-54:~
[root@ip-172-31-9-54 html]# ll
total 20
-rw-r--r-- 1 webapp webapp 90 Sep 1 2020 cron.yaml
-rw-r--r-- 1 webapp webapp 2784 Sep 1 2020 index.php
-rw-r--r-- 1 webapp webapp 189 Sep 1 2020 logo_aws_reduced.gif
-rw-r--r-- 1 webapp webapp 367 Sep 1 2020 scheduled.php
-rw-r--r-- 1 webapp webapp 3490 Sep 1 2020 styles.css
[root@ip-172-31-9-54 html]#
รันคำสั่งนี้เพื่อตรวจสอบข้อมูลในไฟล์ index.php
less index.php
Output (example)
ค้นหาคำว่าCongratulations!
ตามที่มาร์คไว้ จากนั้น Copy เตรียมไว้เพื่อที่จะไปค้นหาในหน้าเว็บเบราว์เซอร์ (ถ้าต้องการออกจากหน้านี้ให้กดปุ่มq
)
root@ip-172-31-9-54:~
" ...ตัดส่วนบนออก... "
<body>
<section class="congratulations">
<h1>Congratulations!
<p>Your AWS Elastic Beanstalk PHP application is now running on your own dedicated environment in the AWS Cloud
<p>You are running PHP version
<p>This environment is launched with Elastic Beanstalk PHP Platform
</section>
<section class="instructions">
<h2>What's Next?
<ul>
<li>AWS Elastic Beanstalk overview
<li>Deploying AWS Elastic Beanstalk Applications in PHP Using Eb and Git
<li>Using Amazon RDS with PHP
<li>Customizing the Software on EC2 Instances
<li>Customizing Environment Resources
</ul>
" ...ตัดส่วนล่างออก... "
กลับมาที่หน้าเว็บเบราว์เซอร์ของเรา จากนั้นกดปุ่มCtrl + f
ให้กล่องค้นหาข้อความด้านขวาบนแสดงขึ้นมา แล้ววางข้อความที่เรา Copy เมื่อสักครู่นี้ลงไป + Enter ก็จะเห็นว่ามีข้อความที่ตรงกันเหมือนกับรูปภาพครับ
ทดสอบการ Shutdown Instance
ขั้นตอนนี้ผมจะทดสอบการ Shutdown Instance ซึ่งหลังจากที่ทำการ Shutdown ไปแล้ว Instance ตัวเก่าจะถูก Terminate โดยอัตโนมัติ และ Instance ตัวใหม่จะถูกสร้างขึ้นมาเองโดยอัตโนมัติ ซึ่งจะคล้ายๆกับฟังก์ชันของ Auto Scaling นั่นเองครับ
รันคำสั่งนี้เพื่อ Shutdown Instance
shutdown -h now
หลังจากที่รันคำสั่งนี้ไปแล้วโปรแกรม PuTTY ที่เรากำลัง Login อยู่นั้นจะถูกตัดการเชื่อมต่อทันทีครับ ทีนี้ให้เรากดOK
ไปได้เลย ! แต่ว่ายังไม่ต้องปิดโปรแกรม PuTTY นะครับ
ทีนี้ให้กลับมาที่หน้า EC2 Instance ของเราอีกครั้ง จะเห็นว่า Instance:i-09efxxxxxxxxxxxxx
ตัวเก่าถูก Terminate ไปแล้ว
! แต่มี Instance:i-0285xxxxxxxxxxxxx
ตัวใหม่ถูกสร้างขึ้นมาแทนที่อัตโนมัติ
ทีนี้ให้คลิกเข้าไปที่ Instance ID ตัวใหม่ได้เลยครับ
เมื่อเข้ามาแล้วให้ดูที่ Public IPv4 address แล้วนำไปเทียบกับ Instance ID ของตัวเก่าที่บันทึกไว้
จะเห็นว่า Public IPv4 address ไม่มีการเปลี่ยนแปลงครับ
กลับมาที่หน้าโปรแกรม PuTTY แล้วคลิกขวาที่แถบด้านบน และเลือกRestart Session
เลือกAccept
เพื่อเชื่อมต่อกับ EC2 อีกครั้ง
Output (example)
จะเห็นว่าเราสามารถเชื่อมต่อกับ EC2 ที่สร้างโดย Elastic Beanstalk ได้โดยที่ไม่ต้องไปตั้งค่าใน PuTTY ใหม่อีกครั้งครับ
root@ip-172-31-19-243:~
Using username "ec2-user".
Authenticating with public key "tinnakorn-eb-test"
_____ _ _ _ ____ _ _ _
| ____| | __ ___| |_(_) ___| __ ) ___ __ _ _ __ ___| |_ __ _| | | __
| _| | |/ _ \/ __| __| |/ __| _ \ / _ \/ _\ | '_ \/ __| __/ _\ | | |/ /
| |___| | (_| \__ \ |_| | (__| |_) | __/ (_| | | | \__ \ || (_| | | <
|_____|_|\__,_|___/\__|_|\___|____/ \___|\__,_|_| |_|___/\__\__,_|_|_|\_\
Amazon Linux 2 AMI
This EC2 instance is managed by AWS Elastic Beanstalk. Changes made via SSH
WILL BE LOST if the instance is replaced by auto-scaling. For more information
on customizing your Elastic Beanstalk environment, see our documentation here:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
[ec2-user@ip-172-31-19-243 ~]$
กลับมาที่หน้าเว็บเบราว์เซอร์อีกครั้ง และทำการ Reload ดูครับ
จะเห็นว่าเราก็ยังสามารถใช้งานหน้าเว็บเบราว์เซอร์นี้ได้โดยผ่าน Instance ตัวใหม่ที่ถูกสร้างขึ้นมาแทนที่ตัวเก่าโดยอัตโนมัติครับ
การสาธิตของผมก็มีเพียงเท่านี้ครับ ต่อไปจะเป็นขั้นตอนการลบ AWS Resource ที่สร้างขึ้นในบทความนี้ครับ
วิธีการลบ AWS Resource ที่สร้างขึ้นในบทความนี้
การลบฟังก์ชันที่ได้สร้างขึ้นใน Service ต่างๆ
ลบโดยเรียงตามขั้นตอนดังนี้:
- Elastic Beanstalk
- Environments
- Applications
- Amazon EC2
- Key Pairs
การลบ Environments และ Applications ใน Elastic Beanstalk
เข้ามาที่ 「 Service Elastic Beanstalk » Environments 」 แล้วทำการ Termminate
เข้ามาที่ 「 Service Elastic Beanstalk » Applications 」 แล้วทำการลบ
เข้ามาที่ 「 Service EC2 » Key Pairs 」 แล้วทำการลบ
สรุป
การสาธิตทดลองเริ่มต้นใช้งาน Sample Elastic Beanstalk ด้วย PHP ก็มีเพียงเท่านี้ครับ ซึ่งการใช้งานนี้เราสามารถเลือกใช้ Platform อื่นๆได้อีกมากมาย เช่น 「 .NET Core on Linux, .NET on Windows Server, Docker, GlassFish, Go, Java, Node.js, PHP, Python, Ruby, Tomcat 」 เป็นต้น
นอกจากนี้ Elastic Beanstalk ยังมีฟังก์ชันที่คล้ายกับ Auto Scaling อยู่ในตัวด้วยครับ โดยจะสังเกตได้จากตอนที่ผมทำการ Shutdown Instance ตัวเก่าไปแล้วก็จะถูก Terminate โดยอัตโนมัติ และ Instance ตัวใหม่ก็ถูกสร้างขึ้นมาแทนที่ตัวเก่าทันทีโดยอัตโนมัติ ซึ่งจะทำให้เราสามารถใช้งานเว็บเบราว์เซอร์ที่เรากำลังใช้อยู่ได้อย่างต่อเนื่องอีกด้วยครับ